\chapter{Introduction}
\section{Objectif}
L'objectif du projet est de réaliser un outil semblable à gprof afin de profiler un code source.
Pour cela nous allons écrire plugin pour le compilateur GCC. 

Ce plugin permettra d'effectuer une analyse statique des accès mémoire du code source et une analyse dynamique du temps d'exécution du binaire compilé, puis de corréler les deux.
Nous allons écrire deux passes qui génèrent des traces. La première collectera des informations pendant la phase de compilation, et la seconde pendant l'exécution du binaire instrumenté.

Ces traces sont ensuite lues et analysées par un parseur. 
Des fichiers de données par fonctions seront générés lors de l'analyse puis affichés à l'aide de gnuplot. En sortie, nous obtenons des graphes présentant les résultats de l'analyse.

\section{Architecture}
L'architecture du projet de se décompose en trois parties : 
\begin{enumerate}
  \item le plugin gcc en lui-même
  \item une bibliothèque dynamique contenant les fonctions appelées par le code instrumenté
  \item le parseur
\end{enumerate}

\section{Compilation}
La compilation se fait à l'aide d'un fichier Makefile récursif.
Un premier fichier Makefile permet de compiler la librairie dynamique, le plugin gcc et enfin le code source à compiler à l'aide du plugin. Un second fichier Makefile permet de compiler le parseur lex et yacc, et de lancer la lecture et l'analyse des fichiers trace.
Enfin, un dernier fichier Makefile permet de générer les graphiques à partir des données.

\noindent Les étapes de compilation sont donc les suivantes :
\begin{enumerate}
  \item {\tt make} : compilation du plugin, de la librairie dynamique et du fichier source
  \item {\tt make run} : exécution du binaire instrumenté
  \item {\tt make parse} : lecture et analyse des traces
  \item {\tt make plot} : traite les données à l'aide de gnuplot et affiche des graphiques
\end{enumerate}
La commande {\tt make complete} permet de réaliser toutes ces étapes en une et {\tt make clean} permet un nettoyage récursif de tous les sous-dossiers.
